草庐IT

linux - 从 Bash 中的日期减去天数

我想从Bash中的日期中减去“天数”。我正在尝试这样的事情..echo$dataset_date#outputis2013-08-07echo$date_diff#outputis2p_dataset_date=`$dataset_date--date="-$date_diffdays"+%Y-%m-%d`#GettingError 最佳答案 您指定的日期不正确。相反,说:date--date="${dataset_date}-${date_diff}day"+%Y-%m-%d如果需要将其存储在变量中,请使用$(...):p_dat

linux - 在 bash 脚本中使用 "alternate screen"

备用屏幕被许多“用户交互”终端应用程序使用,如vim、htop、screen、alsamixer、less,......它就像终端内容的不同缓冲区,它当应用程序退出时消失,所以整个终端恢复,看起来应用程序没有输出任何东西。我想在我自己的shell(bash)脚本中实现完全相同的功能,只是它不必那么便携。我会坚持只使用linux和基于xterm的终端仿真器;但如果可能的话,解决方案应该使用类似tput的东西。但是,我不想使用一些外部脚本语言(甚至是C之类的语言)。虽然我不想使用C(因为它应该是一个依赖尽可能少的bash脚本),但我查看了less的源代码。它似乎使用terminfo作为数据

linux - bashrc 在运行 bash 命令之前不会加载

我正在运行新安装的ArchLinux。当我登录用户(运行bash)并尝试使用.bashrc中的别名时,它给了我“找不到命令”错误。但是,如果我通过“bash”命令重新输入bash,该命令就可以正常工作。是的,我已经在bash中了。最初的环境:SHELL=/usr/bin/bashenv运行bash后,它仍然存在:SHELL=/usr/bin/bash所以我不太确定问题出在哪里。 最佳答案 阅读“bash(1)”中的INVOCATION部分以获取完整的详细信息(这是bash的手册页;使用manbash)。您登录时的第一个shell是“

linux - Bash 命令 :(){ :|:& };: will spawn processes to kernel death. 你能解释一下语法吗?

我看了thispage并且无法理解这是如何工作的。此命令“以指数方式生成子进程,直到您的盒子锁定”。但是为什么呢?我不太了解的是冒号。user@host$:(){:|:&};: 最佳答案 :(){:|:&};:..定义了一个名为:的函数,它会自己生成(两次,一个管道进入另一个),并为自己设置背景。带换行符::(){:|:&};:将:函数重命名为forkbomb:forkbomb(){forkbomb|forkbomb&};forkbomb您可以通过使用ulimit限制每个用户的进程数来防止此类攻击:$ulimit-u50$:(){:

linux - Bash 仅打印标准错误,而不是标准输出

这个问题在这里已经有了答案:HowcanIpipestderr,andnotstdout?(11个回答)关闭6年前。我想对文件进行lint,并打印stderr(错误消息),但不打印stdout(表示文件正常)。php-l"foo/bar.php"如果没有错误,它将向标准输出打印“无错误”消息。如果有错误,它会向stderr打印一条详细消息。我只想要这个。我认为使用>&会很神奇,但我一直不明白它们是如何工作的。我想要的是消耗所有标准输出,保留标准错误。(对不起,如果这是重复的,但我没有找到任何关于这个的问题) 最佳答案 只需将标准输出

linux - 从Linux中的数字获取上限整数(BASH)

我该怎么做:ceiling(N/500)N代表一个数字。但在linuxBash脚本中 最佳答案 为什么要使用外部脚本语言?您默认获得发言权。要获得ceil,请执行$divide=8;by=3;((result=(divide+by-1)/by));echo$result3$divide=9;by=3;((result=(divide+by-1)/by));echo$result3$divide=10;by=3;((result=(divide+by-1)/by));echo$result4$divide=11;by=3;((resu

linux - 如何以另一个用户的身份使用 sudo 在 bash 子shell 中执行一系列命令?

我正在编写一个需要sudo多个命令的bash脚本。我可以这样做:(whoami;whoami)但我不能这样做:sudo(whoami;whoami)我该如何解决这个问题? 最佳答案 您可以使用heredocument将命令作为标准输入传递到sudo'edbash:sudobash这样就不需要摆弄正确的引用,特别是如果你有多个级别,例如:sudobash生产:rootroot/rootapacheapache/usr/share/httpd(请注意,您不能缩进内部终止符-它必须单独一行。如果您想在此处的文档中使用缩进,您可以使用而不是

linux - Bash:如何标记字符串变量?

如果我有一个值为"johnis17岁"的字符串变量我如何使用空格作为分隔符来标记它?我会使用awk吗? 最佳答案 $string="johnis17yearsold"$tokens=($string)$echo${tokens[*]}对于其他分隔符,例如';'$string="john;is;17;years;old"$OLDIFS="$IFS"$IFS=';'tokens=($string)$echo${tokens[*]}$IFS="$OLDIFS"#restoreIFS 关于lin

linux - 如何从 Bash 中的字符串中删除所有非数字字符?

例子:file="123hello"如何编辑字符串file使其仅包含数字而删除文本部分?所以,echo$file应该只打印123。 最佳答案 这是sed的一种方式:$echo$file|sed's/[^0-9]*//g'123$echo"123he23llo"|sed's/[^0-9]*//g'12323或者用纯bash:$echo"${file//[!0-9]/}"123$file="123hello12345aaa"$echo"${file//[!0-9]/}" 12312345要将结果保存到变量本身,请执行以下操作$file=

linux - 如何获取自上次使用 bash 修改文件以来的时间(以秒为单位)?

我需要获取自上次修改文件以来的时间(以秒为单位)。ls-l不显示它。 最佳答案 date的GNU实现有一个-r选项来打印文件的最后修改日期而不是当前日期。我们可以使用格式说明符%s来获取以秒为单位的时间,方便计算时差。lastModificationSeconds=$(date+%s-rfile.txt)currentSeconds=$(date+%s)然后你可以使用算术上下文来计算差异,例如:((elapsedSeconds=currentSeconds-lastModificationSeconds))#orelapsedSec